// 封装的能发送ajax请求的函数： 接口函数
// 请求拦截器
// 对请求做封装处理，如统一添加token等信息
// 响应拦截器
// 对响应做封装处理，如统一处理异常情况等

// 在取异步返回值前，都使用promise对象。
// 在使用的地方使用async/await来取值

// axios

import axios from 'axios';
import qs from "qs"; // QueryString


// Add a request interceptor
// 让post请求的转化为urlencode格式
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    // config:  
    // {
    //     method: 'post',
    //     url: '/login',
    //     data: {
    //         username,
    //         password
    //     }
    // }
    const { method, data } = config;
    if (method.toLowerCase === 'post' && typeof data === 'object') {
        config.data = qs.stringify(data)
    }
    return config;
});


// 响应拦截器
// 使请求成功时的返回值不再是response，而是response.data
// 在请求返回之后，且在请求回调函数之前
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response.data;
}, function (error) {
    // return Promise.reject(error);
    // 统一处理异常，中断promise链： 中断promise链的方法就是不返回（不调用resolve，也不调用reject）
    alert('调用错误' + error.message);
    return new Promise(() => {});
}); 

// axios 返回的是promise
export default axios;
